#pragma once

#include <fstream>
#include <string>

class Util
{
public:
    static bool ReadOneLine(std::string &bigstr, std::string *out, const std::string &sep_line /*"\r\n"*/)
    {
        auto pos = bigstr.find(sep_line);
        if (pos == std::string::npos)
            return false;

        *out = bigstr.substr(0, pos);
        bigstr.erase(0, pos + sep_line.size());
        return true;
    }

    static int FileSize(const std::string &file_name)
    {
        // 按文本方式读, 读到'\0'可能会结束, 所以按照二进制的方式读
        std::ifstream in(file_name, std::ios::binary);
        if (!in.is_open())
            return -1;

        in.seekg(0, in.end);        // 将文件读指针移动到文件末尾
        int file_size = in.tellg(); // 获取文件的字节数

        in.seekg(0, in.beg); // 将指针移回文件开头
        in.close();
        return file_size;
    }

    static bool ReadFileContent(const std::string &file_name, std::string *out)
    {
        int file_size = FileSize(file_name);
        if (file_size > 0)
        {
            std::ifstream in(file_name, std::ios::binary);
            if (!in.is_open())
                return false;

            out->resize(file_size);
            in.read(out->data(), file_size);  // C++11后 data() 可返回 char*（非const）

            in.close();
            return true;
        }

        return false;
    }
};